/**
 *  需求：
 *  定义一个方法，返回一个数组。 方法接收两个参数，第一个参数是数字，第二个参数类型不确定
 *  
 *  返回值是：第一个参数个 第二个参数组成的数组
 * 
 *  泛型：存储类型的变量 
 *   <泛型变量>  常用变量 K T V R S
 * 
 *  应用场景：在定义的时候，不清楚类型是什么？ 在调用的时候才知道类型。所以定义一个泛型变量接收类型
 *   当调用的时候，传递具体的类型
 * 
 * 
 */
function createArr<K>(num:any, param:K):K[]{
    let arr:K[] = []
    for(let i = 0; i < num; i++){
        arr.push(param)
    }
    return arr;
}


console.log(createArr<number>(3,3))

console.log(createArr<string>(3,'a'))

// createArr(3,'a') ==> ['a','a','a']
// createArr(4, 3)  ==> [3,3,3,3]


/**
 *  多个泛型
 * 
 */

function getTuple<K,V>(x:K, y:V):[K,V]{
    return [x,y]
}
console.log(getTuple<number,string>(1,'a'))

/**
 * 泛型接口,
 * 接口中的属性类型有不确定的。定义一个泛型变量
 */
// 服务器返回数据
interface IBook{
    id:number
    title:string
}

interface IPerson{
    id:number
    name:string
    age:number
}

interface IResponse<T> {
    code:number
    msg:string
    data:T
}


let response:IResponse<IBook> = {
    code:200,
    msg:'添加成功',
    data:{
        id:1,
        title:'葵花宝典'
    }
}

let response2:IResponse<IPerson> = {
    code:200,
    msg:'操作成功',
    data:{
        id:2,
        name:'atguigu',
        age:10
    }
}

export {}